SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[LIQObtenerOrganizacionPagoConceptoBK18032008]

@Agente INT,
@OrganizacionLiquidacion INT,
@DesdeLiquidacion DATETIME,
@HastaLiquidacion DATETIME,
@ConceptoLiquidacion INT,
@TipoLiquidacion INT, 
@OrganizacionCobro INT Output,
@PagarPorPrivado CHAR(1) Output 

-- @CUISECobro aqui se retorna el CUISE por el que se debe pagar el concepto (El que figura en Tb_ConceptosDelAgentePorOrganizacion segun validez  (lo eligio el agente)  o el Ultimo sobre el que se pago o el que se esta por Liquidar 
-- @PagarPorPrivado indica "S" que el CUISECobro es el elegido por el agente 

 AS
SET NOCOUNT ON
SET DATEFORMAT DMY
DECLARE @OrganizacionDeclarada INT 
DECLARE @DiasTrabajadosEnOrganizacion INT

SET @OrganizacionDeclarada = NULL 
SET @PagarPorPrivado = 'N'

-- Busco Organizacion Declarada por el Agente segun Validez Hasta
SELECT TOP 1 @OrganizacionDeclarada=CPO.Organizacion FROM Tb_ConceptosDelAgentePorOrganizacion  CPO 
	WHERE   CPO.Agente = @Agente
                          AND CPO.Concepto = @ConceptoLiquidacion
		AND CPO.ValidezHasta >= @HastaLiquidacion 

IF @OrganizacionDeclarada IS NULL
   BEGIN
		SELECT TOP 1 @OrganizacionDeclarada=CPO.Organizacion FROM Tb_ConceptosDelAgentePorOrganizacion  CPO 
			WHERE   CPO.Agente = @Agente
		                          AND CPO.Concepto = @ConceptoLiquidacion
				AND CPO.ValidezHasta IS NULL 
   END	


-- Si declaro una Orgazacion, ver que para el periodo liquidado tenga servicios activos
IF @OrganizacionDeclarada IS NOT NULL
   BEGIN
             SET @DiasTrabajadosEnOrganizacion = dbo.fnLiqDiasTrabajados(@Agente, @DesdeLiquidacion, @HastaLiquidacion,0, @OrganizacionDeclarada)
	IF @DiasTrabajadosEnOrganizacion > 0 
	    BEGIN	
		SET @OrganizacionCobro = @OrganizacionDeclarada
		SET @PagarPorPrivado = 'S'
		GOTO Salir		
	    END 
   END

-- Si el Agente no tiene una Organizacion declarada  buscamos donde se le pago alguno de los conceptos con anterioridad (Conceptos 12,33,36)
SELECT TOP 1 @OrganizacionCobro =  L.Organizacion  FROM tb_RegistroDeLiquidaciones RL 
	INNER JOIN tb_Liquidaciones L ON L.idLiquidacion = RL.Liquidacion 
	INNER JOIN tb_CabeceraDeLiquidacion CL ON CL.IdCabeceraDeLiquidacion = L.IDCabeceraLiquidacion 
	WHERE Rl.Agente = @Agente
	  AND RL.Concepto IN (12,33,36)
	  AND CL.TipoDeLiquidacion = @TipoLiquidacion
	  AND RL.MontoHaberes > 0
	ORDER BY CL.Anio DESC , CL.Mes DESC 

IF @OrganizacionCobro IS NOT NULL AND @OrganizacionCobro <> @OrganizacionLiquidacion
   BEGIN
             SET @DiasTrabajadosEnOrganizacion = dbo.fnLiqDiasTrabajados(@Agente, @DesdeLiquidacion, @HastaLiquidacion,0, @OrganizacionCobro)
	IF @DiasTrabajadosEnOrganizacion > 0 
	    BEGIN	
		GOTO Salir		
	    END 
   END

--- LLega si no declaro, o la organizacion que encontro no tiene servicios para el periodo 
SET @OrganizacionCobro = @OrganizacionLiquidacion	

Salir:

PRINT 'Valores del PA LiqObtenerOrganizacioPagoConcepto'
PRINT @OrganizacionCobro
PRINT @PagarPorPrivado
GO
